package com.foo.calidad.persist.entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Version;

@Entity
@Table(name = "PRODUCTOS")
public class ProductoEntity {

	@Id
	@SequenceGenerator(name = "SEQ_PRODUCTOS", sequenceName = "GEN_PRODUCTOS_ID", allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_PRODUCTOS")
	private Long id;

	@Version
	private int version;

	private String descripcion;
	private String referencia;

	@ManyToOne
	@Column(nullable = false)
	private TipoProductoEntity tipo;

	private Date fechaAlta;
	private UsuarioEntity usuario;
	private Date fechaRevision;
	private String observaciones;

	@OneToMany(mappedBy = "producto", cascade = CascadeType.ALL)
	private Set<ChequeoProductoEntity> chequeos = new HashSet<ChequeoProductoEntity>();

	@OneToMany(mappedBy = "producto", cascade = CascadeType.ALL)
	private Set<MedicionProductoEntity> mediciones = new HashSet<MedicionProductoEntity>();

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public int getVersion() {
		return version;
	}

	public void setVersion(int version) {
		this.version = version;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getReferencia() {
		return referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	public TipoProductoEntity getTipo() {
		return tipo;
	}

	public void setTipo(TipoProductoEntity tipo) {
		this.tipo = tipo;
	}

	public Date getFechaAlta() {
		return fechaAlta;
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	public UsuarioEntity getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioEntity usuario) {
		this.usuario = usuario;
	}

	public Date getFechaRevision() {
		return fechaRevision;
	}

	public void setFechaRevision(Date fechaRevision) {
		this.fechaRevision = fechaRevision;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public Set<ChequeoProductoEntity> getChequeos() {
		return chequeos;
	}

	public void setChequeos(Set<ChequeoProductoEntity> chequeos) {
		this.chequeos = chequeos;
	}

	public Set<MedicionProductoEntity> getMediciones() {
		return mediciones;
	}

	public void setMediciones(Set<MedicionProductoEntity> mediciones) {
		this.mediciones = mediciones;
	}

}
